<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
<script type="text/javascript">

//具体加密字符串方法如下：
var toCode = function(str){ 		// 加密字符串
    var key = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
		// 定义密钥，36个字母和数字
    var l = key.length; 			// 获取密钥的长度
    var a = key.split("");			// 把密钥字符串转换为字符数组
    var s = "", b, b1, b2, b3; 		// 定义临时变量
    for(var i = 0; i < str.length; i ++ ){ 		// 遍历字符串
        b = str.charCodeAt(i); 
		// 逐个提取每个字符，并获取Unicode编码值
        b1 = b % l;  				// 求Unicode编码值的余数
        b = (b - b1) / l;  			// 求最大倍数
        b2 = b % l;  				// 求最大倍数的余数
        b = (b - b2) / l;  			// 求最大倍数
        b3 = b % l;  				// 求最大倍数的余数
        s += a[b3] + a[b2] + a[b1]; 
 		// 根据这些余数值映射到密钥中对应下标值的字符
    }
    return s; ; 					// 返回这些映射的字符
}
//解密字符串的方法如下：
var fromCode = function(str){ 			// 解密toCode()方法加密的字符串
    var key = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	// 定义密钥，36个字母和数字
    var l = key.length; 				// 获取密钥的长度
    var b, b1, b2, b3, d = 0, s; 		// 定义临时变量
    s = new Array(Math.floor(str.length / 3)) 
	// 计算加密字符串可能包含的字符数，并定义数组
    b = s.length; 						// 获取数组的长度
    for(var i = 0; i < b; i ++ ){ 
	// 以数组的长度为循环次数，遍历加密字符串
        b1 = key.indexOf(str.charAt(d)) 
		// 截取周期内第一个字符，并计算它在密钥中的下标值
        d ++ ;
        b2 = key.indexOf(str.charAt(d)) 
		// 截取周期内第二个字符，并计算它在密钥中的下标值
        d ++ ;
        b3 = key.indexOf(str.charAt(d)) 
		// 截取周期内第三个字符，并计算它在密钥中的下标值
        d ++ ;
        s[i] = b1 * l * l + b2 * l + b3 
		// 利用上面下标值（约数值），反算被加密字符的Unicode编码值
    }
    b = eval("String.fromCharCode(" + s.join(',') + ")");
	// 最后调用fromCharCode()方法算出对应的字符串
    return b;							// 返回被解密的字符串
}
//利用上面自定义的加密和解密方法来进行试验：
var s = "javascript中国";   			// 字符串直接量
s = toCode(s);            				// 加密字符串
alert(s);  		// 返回字符串"02Y02P03A02 P03702R03602X034038FFXH6L"
s = fromCode(s);         				// 解密被加密的字符串
alert(s);                					// 返回字符串"javascript中国"


</script>
</head>

<body>
</body>
</html> 
